<?php
/**
 * $Id: adapter.php 19 2009-06-08 08:45:14Z eyou80 $
 */

/**
 * 通用的数据库适配器接口
 *
 * @package Db
 */
interface Tinyask_Db_Adapter
{
	/**
	 * 判断适配器是否可用
	 *
	 * @return boolean
	 */
	public static function isAvailable();

	/**
	 * 数据库连接
	 *
	 * @param Tinyask_Config $config
	 * @throws Tinyask_Db_Exception
	 * @return mixed
	 */
	public function connect(Tinyask_Config $config);

	/**
	 * 执行查询
	 *
	 * @param mixed $sql
	 * @param string $action
	 * @param mixed $handle
	 * @throws Tinyask_Db_Exception
	 * @return mixed
	 */
	public function query($sql, $action, $handle);

	/**
	 * 将数据查询的其中一行作为数组取出,其中字段名对应数组键值
	 *
	 * @param resource $resource
	 * @return array
	 */
	public function fetch($resource);

	/**
	 * 将数据查询的其中一行作为对象取出,其中字段名对应对象属性
	 *
	 * @param resource $resource
	 * @return object
	 */
	public function fetchObject($resource);

	/**
	 * 转义值
	 *
	 * @param string $string
	 * @return string
	 */
	public function quoteValue($string);

	/**
	 * 转义字段名称
	 *
	 * @param string $string
	 * @return string
	 */
	public function quoteField($string);

	/**
	 * 合成sql查询语句
	 *
	 * @param array $sql
	 * @return string
	 */
	public function mergeSelect(array $sql);

	/**
	 * 获取最后一次查询影响的行数
	 *
	 * @param mixed $resource
	 * @param mixed $handle
	 * @return integer
	 */
	public function affectedRows($resource, $handle);

	/**
	 * 获取最后一次插入返回的主键值
	 *
	 * @param mixed $resource
	 * @param mixed $handle
	 * @return integer
	 */
	public function lastInsertId($resource, $handle);
}
